% IN:
%  indeks_robota - indeks robota, ktory powinien rozpoczac kolejkowanie
%
% OUT:
%  0 - kolejka pelna, nie udalo sie skolejkowac robota
%  1 - kolejkowanie rozpoczete pomyslnie
%
% Zalozenia:
% - robot nie jest dodany do zadnej kolejki
function ret = rozpocznij_kolejkowanie(indeks_robota)
    global serwer_ob;
    global roboty;
    global mapa;
    global kasy;
    global ilosc_robotow;
    
    % na wszelki wypadek, gdyby robot byl wczesniej skolejkowany
    usun_z_kolejki(indeks_robota);
    
    pozycja = roboty(indeks_robota).pozycja;
    kierunek = kierunek_robota(indeks_robota,0);
    indeks_korytarza=roboty(indeks_robota).indeks_korytarza;
    kolejka_pelna=1;
    
    % indeks_korytarza>0 oznacza kolejkowanie do korytarza
    if(indeks_korytarza>0)
        % jesli robot jest blizej wschodniego wjazdu to do indeksu korytarza
        % trzeba dodac 8, aby przejsc do drugiej polowki tablicy kolejek,
        % gdzie zapisane sa kolejki do wschodnich wjazdow
        if(roboty(indeks_robota).pozycja(1) > serwer_ob.korytarze(indeks_korytarza,1).x)
            % wjazd wschodni
            modyfikator_indeksu = 8;
            wjazd_korytarza = 0;
        else
            % wjazd zachodni
            modyfikator_indeksu = 0;
            wjazd_korytarza = 1;
        end;
    
        % wyznaczenie ostatniej pozycji w kolejce do korytarza
        for pozycja_w_kolejce=1:ilosc_robotow
            if(serwer_ob.kolejki(indeks_korytarza+modyfikator_indeksu,pozycja_w_kolejce)==0) 
                kolejka_pelna=0;
                break;
            end;
        end;
    else % indeks_korytarza==0 - kolejkowanie do kasy
        kasa = kasy(roboty(indeks_robota).numer_kasy);
        for pozycja_w_kolejce=1:ilosc_robotow
            if(kasa.kolejka(pozycja_w_kolejce)==0)
                kolejka_pelna=0;
                break;
            end;
        end;
    end;
    
    docelowe_pole = miejsce_w_kolejce(indeks_robota,pozycja_w_kolejce);

    if(kolejka_pelna==0 && ~isequal(docelowe_pole,[0 0]))
        
        dijkstry(pozycja,docelowe_pole,indeks_robota,0);
        roboty(indeks_robota).cel=docelowe_pole;
        
        roboty(indeks_robota).stan=4; % stan: oczekiwanie w kolejce
        
        if(indeks_korytarza>0)
            % dopisanie robota do tablicy robotow oczekujacych w
            % kolejce do korytarza
            serwer_ob.kolejki(roboty(indeks_robota).indeks_korytarza,pozycja_w_kolejce) = indeks_robota;
        else
            kasy(roboty(indeks_robota).numer_kasy).kolejka(pozycja_w_kolejce) = indeks_robota;
        end;

        roboty(indeks_robota).pozycja_w_kolejce=pozycja_w_kolejce;
    
        ret=1;
    else
        ret=0;
    end;
    
    
    %pozycja=roboty(indeks_robota).pozycja
    %droga=roboty(indeks_robota).droga(1:10,:)
    %stan=roboty(indeks_robota).stan